package com.miku.blog.utils;

import com.miku.blog.domain.pojo.IpAddressesDetail;
import com.miku.blog.domain.pojo.LoginUser;
import com.miku.blog.domain.pojo.SystemConstance;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

import javax.servlet.http.HttpServletRequest;
import java.util.Objects;

/**
 * @author shkstart
 * @create ${}YEAR-05-28 18:47
 */
public class GenerateKeyUtils {

    public static final String PASSWORD_ENCODER_DEFAULT_SALT = "$2a$10$";

    /**
     * 生成   用户登录数据缓存键
     * @param request
     * @param ipAddressesDetail
     * @return
     */
    public static String generateRedisCacheKey(@NonNull HttpServletRequest request,@Nullable IpAddressesDetail ipAddressesDetail){

//        HttpSession session = request.getSession(false);
//        if (Objects.isNull(session)){
//            throw new SystemException(HttpStatusEnum.NEED_LOGIN_AGAIN);
//        }
        String ip;
        if (Objects.nonNull(ipAddressesDetail)){
            ip = ipAddressesDetail.getIp();
        }else {
            ip = IpAddressesUtils.getIp(request);
        }

        String redisCacheKey
                = new StringBuilder().append(SystemConstance.REDIS_LOGINUSER_KEY)
                .append(":")
//                .append(session.getId())
                .append(ip.hashCode())
                .toString();
        return redisCacheKey;
    }

    /**
     * 根据用户信息(ID 用户名) 生成未加密前的Token令牌
     * @param loginUser
     * @return
     */
    public static String generateTokenKey(@NonNull LoginUser loginUser){
        String tokenKey
                = new StringBuilder().append(SystemConstance.UNIVERSAL_KEY)
                .append(":")
                .append(loginUser.getUserAuth().getId())
                .append("/")
                .append(loginUser.getKey())
                .toString();
        return tokenKey;
    }

    /**
     * 生成 用户数据缓存键 的 索引键
     * @param userId
     * @return
     */
    public static String getRedisUserCacheKey(Integer userId){
        StringBuilder append = new StringBuilder()
                .append(SystemConstance.REDIS_LOGINUSER_ID_KEY)
                .append(":")
                .append(userId);
        return append.toString();
    }


    /**
     * 生成 去除前缀  前  的Token令牌
     * @param encode
     * @return
     */
    public static String generatePasswordEncodeKey(String encode){
        String key = PASSWORD_ENCODER_DEFAULT_SALT + encode;
        return key;
    }


    /**
     * 将加密后的Token令牌 的前缀(加密方式)去除
     * @param encode
     * @return
     */
    public static String replacePasswordEncodeKey(String encode){
        String replace = encode.replace(PASSWORD_ENCODER_DEFAULT_SALT, "");
        return replace;
    }



//    public static String generateArticleCommentKey(Integer type){
//        String typeString = null;
//        if (type.equals(SystemConstance.ARTICLE_TYPE_CODE)){
//            typeString = SystemConstance.ARTICLE_TYPE;
//        }else if (type.equals(SystemConstance.FRIEND_LINK_TYPE_CODE)){
//            typeString = SystemConstance.FRIEND_LINK_TYPE;
//        }else if (type.equals(SystemConstance.TALK_TYPE_CODE)){
//            typeString = SystemConstance.TALK_TYPE;
//        }
//        return new StringBuilder()
//                .append(SystemConstance.REDIS_ARTICLE_COMMENT_KEY)
//                .append(":")
//                .append(typeString)
//                .toString();
//    }



}
